package com.hdd.utils.wx.pay;

import org.apache.commons.lang.RandomStringUtils;

import java.io.File;
import java.util.HashMap;
import java.util.Map;


public class WeixinPay {


    /**
     * 企业付款接口  用于企业向微信用户个人付款
     * 目前支持向指定微信用户的openid付款。
     * @param pkcFile  商户证书文件
     * @param orderNo  订单编号
     * @param weixinOpenId  要付款的用户openid
     * @param realname  收款用户姓名
     * @param payAmount 转账金额
     * @param desc  企业付款备注
     * @param ip  ip地址
     * @return
     */
    public static Object[] payToUser(File pkcFile, String orderNo, String weixinOpenId, String realname
            , Double payAmount, String desc, String ip) {
        Map<String, String> paramMap = new HashMap<String, String>();
        // 公众账号appid[必填]
        paramMap.put("mch_appid", PaymentConfig.appid);
        // 微信支付分配的商户号 [必填]
        paramMap.put("mchid", PaymentConfig.mch_id);
        // 终端设备号(门店号或收银设备ID)，注意：PC网页或公众号内支付请传"WEB" [非必填]
        paramMap.put("device_info", "WEB");
        // 随机字符串，不长于32位。 [必填]
        paramMap.put("nonce_str", RandomStringUtils.random(16, Num62.N62_CHARS));

        // 商户订单号,需保持唯一性[必填]
        paramMap.put("partner_trade_no", orderNo);

        // 商户appid下，某用户的openid[必填]
        paramMap.put("openid", weixinOpenId);

        //校验用户姓名选项   NO_CHECK：不校验真实姓名 FORCE_CHECK：强校验真实姓名
        paramMap.put("check_name", "OPTION_CHECK");

        //收款用户姓名,如果check_name设置为FORCE_CHECK，则必填用户真实姓名
        paramMap.put("re_user_name", realname);
        // 企业付款金额，金额必须为整数 单位为分 [必填]
        paramMap.put("amount", PayUtil.changeY2F(payAmount));
        // 企业付款描述信息 [必填]
        paramMap.put("desc", desc);
        // 调用接口的机器Ip地址[必填]
        paramMap.put("spbill_create_ip", ip);
        // 根据微信签名规则，生成签名
        paramMap.put("sign",
                PayUtil.createSign(paramMap, PaymentConfig.appKey));
        // 把参数转换成XML数据格式
        String xmlWeChat = PayUtil.assembParamToXml(paramMap);
        String resXml = "";
        boolean postError = false;
        try {
            resXml = ClientCustomSSL.getInSsl(PaymentConfig.pay_url, pkcFile, PaymentConfig.mch_id
                    , xmlWeChat, "application/xml");
        } catch (Exception e1) {
            postError = true;
            e1.printStackTrace();
        }
        Object[] result = new Object[2];
        result[0] = postError;
        result[1] = resXml;
        return result;
    }



}